1. Field of the Invention
The present invention relates generally to computer implemented data transfers, and more particularly, to an improved process and apparatus for transferring data between files having different formats.
2. Description of the Related Art
In recent years, computer software technology has been growing at a very rapid pace. In order to remain competitive in this rapidly expanding industry, developers of new software applications have been including translation features in their new applications which allow users to access files created using older versions of their application. In addition to version compatibility, developers have also implemented translation features which allow users working in one application to open files created by competing applications. In fact, the ability to open files created by competing applications is critically important for developers desiring to expand the market share for their particular software product.
By way of example, developers of word processing, spreadsheet and graphics applications typically include translation capabilities as part of their commercially available products. The quality and thoroughness of an application's translation capabilities are generally rated by how well data from a file created by a competing application can be imported or otherwise converted into a file for use by the application. The same applies when data contained in a file that is currently in use is exported or otherwise stored into a file having a format associated with another application.
Because developers are constantly revising their own applications by adding new features and enhancing old features, the translation capabilities provided with one application may not be able to seamlessly translate data having new or enhanced features. Therefore, the translation capabilities provided for applications must be constantly updated to keep pace with updates and enhancements made in competing products.
FIG. 1 is a block diagram 100 identifying conventional interactions between an application 102 and a translator 108. As shown, application 102 and translator 108 are stored within a computer system's random access memory 104. Also stored in random access memory 104 is an active file 103 in the application's native format which is being manipulated by application 102. There is also shown an external file 110 which represents a file created by an application other than application 102. Typically, external file 110 is stored on a storage medium such as a disk drive.
In operation, when a user initiates an import of data from external file 110 to active file 103, for example, application 102 will allocate a block of memory for a parameter block 106, which is a data structure having a number of fields used with the import processing. Application 102 will then be able to communicate with translator 108 via parameter block 106. By way of example, application 102 typically sets a directive field (e.g., message) within parameter block 106, which indicates to translator 108 that a "data import" from external file 110 has been requested.
In word processing applications, for example, a file may have various distinguishable elements of data which may include headers, footers, footnotes, and body text. For each element of data, a multitude of attributes are used to characterize the elements of data. By way of example, attributes may identify the text length, text size, font type, text color, number of columns, margin information, etc. These attributes typically correspond to fields within parameter block 106.
As can be appreciated, as applications increase in functionality or existing functions are updated, additional fields need to be added to parameter block 106. Although continually adding new fields to an existing collection of fields of parameter block 106 works well when new attributes need to be processed by translator 108, infinitely tacking additional fields to parameter block 106 brings about undesirable consequences.
An undesirable consequence is that continually adding to parameter block 106 will generate a substantially large data structure which needs to be loaded into random access memory 104 each time a data translation is performed. Further, fields that are specific to particular file formats (e.g., a file created by MicrosoftWord.RTM.) are generally added ad hoc to parameter block 106. As a result, the entire parameter block 106 including MicrosoftWord.RTM.-specific fields must be loaded into random access memory 104 even though they are not needed for a particular data translation.
Besides having the undesirable consequence of increasing the need for random access memory 104, programmers responsible for servicing and updating parameter block 106 are faced with the exceedingly difficult task of maintaining and understanding the ad hoc additions made to parameter block 106 in response to additional features added to a competing application. Consequently, since parameter block 106 grows each time a feature is added or revised in new versions of competing applications, the sheer number of fields resulting in future versions of parameter block 106 will make it foreseeably difficult to manage and maintain. Also, this makes it difficult to maintain backward compatibility with earlier versions of products.
In fact, since additional fields of parameter block 106 are literally tacked onto an existing list of fields, there is no organizational logic to guide future programmers that are assigned the task of performing updates. As a result, when updates are performed on parameter block 106, there is no reasonable way to identify which fields have been rendered obsolete or are no longer needed. Therefore, the entire parameter block 106 will necessarily continue to grow requiring even increasing amounts of random access memory 104 and become more difficult to maintain and service.
In view of the foregoing, what is needed is a process and apparatus for transferring data between files having different formats without endlessly adding fields to a parameter block. There is also a need for a data transfer process and apparatus that efficiently uses random access memory while providing data structures that are easy to maintain and update.